package com.example.diagnose.Config;

import com.example.diagnose.Domain.BaiduChatMessage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ErnieBotTurboStreamParam implements Serializable {

    private List<BaiduChatMessage> messages;
    private Boolean stream;
    private String user_id;
    /**
     * 说明：
     * （1）较高的数值会使输出更加随机，而较低的数值会使其更加集中和确定
     * （2）默认0.95，范围 (0, 1.0]，不能为0
     * （3）建议该参数和top_p只设置1个
     * （4）建议top_p和temperature不要同时更改
     */
    private float temperature = 0.95F;

    /**
     * 说明：
     * （1）影响输出文本的多样性，取值越大，生成文本的多样性越强
     * （2）默认0.8，取值范围 [0, 1.0]
     * （3）建议该参数和temperature只设置1个
     * （4）建议top_p和temperature不要同时更改
     */
    private float top_p = 0.8F;

    /**
     * 通过对已生成的token增加惩罚，减少重复生成的现象。说明：
     * （1）值越大表示惩罚越大
     * （2）默认1.0，取值范围：[1.0, 2.0]
     */
    private float penalty_score = 1.0F;

    /**
     * 模型人设，主要用于人设设定，例如，你是xxx公司制作的AI助手
     */
    private String system;

    public void changeSystemToCh() {
        this.system = "你是一个可进行基本医疗问题解答的问诊助手中医医生，你的回答要尽可能贴近中医解答问题的口吻，尽量在70字以内，不要出现太多可能情况的回答，最好为一两种情况，回答不要采用分条列出，概括性进行总的回复";
    }

    public void setSystem() {
        this.system = "你是一个可进行基本医疗问题解答的问诊助手医生，你的回答要尽可能贴近医生解答问题的口吻，尽量在70字以内，不要出现太多可能情况的回答，最好为一两种情况，回答不要采用分条列出，概括性进行总的回复";
    }

    public boolean isStream() {
        return Objects.equals(this.stream, true);
    }
}


